/*****************************************************************
 * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work
 * for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License. You may obtain a copy of the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations
 * under the License.
 ****************************************************************/
package reco.db;

/**
 * Factory of fields constraints.
 * <p>
 * Field factories provides a clean way to add constraints to fields when used as Constraints propose it.
 */
public interface ConstraintFactory {
    /**
     * Construct a constraint for a field.
     * 
     * @param <T>
     *            type of values to be validated
     * @param <D>
     *            {@link Domain} over which the field is defined.
     * @param field
     *            {@link Field} which values must be validated
     * @return a not <code>null</code> constraint over the <code>field</code>.
     */
    <T> Constraint<T> createConstraintFor(Field<T, ?> field);

}
